package org.batatasframework.support.loader;

import org.batatasframework.properties.PropertiesResource;
import org.springframework.beans.factory.InitializingBean;

/**
 * 通用的属性文件的读取；本系统所需要定义的属性文件，都可以使用这个父类来读取
 * @author jackson
 *
 */
public abstract class CommonPropertiesLoader extends AbstractPropertiesLoadable implements InitializingBean{
	
	@Override
	public void afterPropertiesSet() throws Exception {
		PropertiesResource lines = readLines(propertyPath);
		
		/*
		 * 如果从配置文件里解析没有任何数据，则直接退出。
		 * 
		 * 注意：定义也不一定是必须的，所以这里不应该抛出异常，否则整个系统都没法启动。
		 */
		if(!lines.isEmpty()) {
			parseLines(lines);
			
			if(logger.isInfoEnabled()){
				logger.info("有效的配置信息(行)：" + lines.size());
			}
		}else{
			logger.warn("没有任何的配置信息！");
		}
		
		afterInit();
	}
	
	/** 在处理完定义文件后调用；即收尾工作！如果需要就重写这个方法 */
	protected void afterInit() throws Exception{ }
	
	/** 按规则把配置文件定义的内容解析成一行一行的记录 */
	protected abstract void parseLines(PropertiesResource properties) throws Exception;
}
